# __init__.py
import os

from flask import Flask
from flask_cors import CORS 
from botocore.config import Config 

from s3_web_browser.routes import register_routes
from datetime import datetime, timezone 

def create_app(config_class: str = "config.Config") -> Flask:
    app = Flask(__name__, instance_relative_config=True)

    # 您的 CORS 配置保持不变
    origins = [
        "http://localhost:5173", 
        "http://127.0.0.1:5173", 
        "http://192.168.19.138:5173",
        "http://localhost:5174", 
        "http://127.0.0.1:5174", 
        "http://192.168.19.138:5174",
        "http://172.30.110.168:5173",
        "http://172.30.110.168:5174",
        "http://36.248.25.155:5173",
    ]
    CORS(app, 
        resources={r"/api/*": {"origins": origins}}, 
        supports_credentials=True
    )

    app.config.from_object(config_class)
    
    # ==================== 核心改造点 开始 ====================

    # 1. 添加 SECRET_KEY，用于加密会话 Cookie。这是启用会话功能的必需品。
    #    在生产环境中，请务必更换为一个更复杂、随机的字符串，并最好从环境变量加载。
    app.config['SECRET_KEY'] = 'c9a8b7d6e5f4a3b2c1d0e9f8a7b6c5d4e3f2a1b0c9d8e7f6a5b4c3d2e1f0'
    
    # 您的自定义URL签名盐值保持不变
    app.config['URL_SIGNING_SALT'] = "e2a9b8c7d6e5f4a3b2c1d0e9f8a7b6c5d4e3f2a1b0c9d8e7f6a5b4c3d2e1f0e9"
    
    # 2. 移除硬编码的密钥，并将配置重命名为“模板”
    #    这个模板包含了所有用户通用的配置，如 endpoint_url
    app.config["AWS_KWARGS_TEMPLATE"] = {
        "endpoint_url": "http://obs-fujian-zhihcs.cucloud.cn",
        "config": Config(
            signature_version="s3v4",
            s3={
                'addressing_style': 'path',
                'calculate_md5': True 
            },
        )
    }

    # ==================== 核心改造点 结束 ====================

    # 您的 Jinja2 过滤器保持不变
    @app.template_filter('format_datetime')
    def format_datetime_filter(dt_str, format_string='%Y-%m-%d %H:%M:%S'):
        if not dt_str:
            return ""
        try:
            dt_object = datetime.fromisoformat(str(dt_str))
            return dt_object.strftime(format_string)
        except (ValueError, TypeError) as e:
            print(f"Error formatting datetime: {dt_str} - {e}")
            return str(dt_str)

    register_routes(app)
    return app